<!DOCTYPE html>
<html lang="en"> 
<!-- lang 使用的是什么语言 en是指英语 -->
<head>
	<meta charset="utf-8"/>
	<title>Document</title>
</head>
<body>
	<!--  live server-->
	<h1 style="height: 100px;">Javascript</h1>
	<input type="text">/<input type="text">=
	<script src="demo1.js"></script>
	<script type="text/javascript"> 
	//type 可以不写默认JavaScript
		console.log(12345)
		//控制台输出
		document.write('123')
		document.write('<h1>123</h1>')
		//页面输出内容
		alert('hello world');
		// 警告框 （括号里面是弹出的内容）

		//js是弱类型，一个变量可以赋值不同类型的值
		var num = 100;
		console.log(typeof num); //number
		var num = 'abcdefg'
		console.log(typeof num)  //string
		//一个变量在某一时刻只有一种数据类型
		var txt = 'hello world';  
		console.log(typeof txt) //string
		var flag = true;
		console.log(typeof flag) //boolean

		var n1 = 14.09;
		console.log(typeof n1); //number

		//undefined类型，是派生自null，(已声明变量，未初始化)，一般出错的时候检验时或者长度抄了 属性不存在也是undefined
		// 是空值，声明变量，但未初始化
		var a;
		console.log(a); // 没有初始化所以值为空 是空值
		console.log(typeof a);// 类型是undefined 
		
		console.log(null == undefined); //true 
		console.log(null === undefined); //false

		// null类型是空值，且null是空对象(已分配空间，未初始化)
		var obj = null;  //将来这个变量想要存储对象的话，但又未确定值，就初始化为null
		console.log(typeof obj);//结果是object 
		console.log(a == obj)

		//NaN 和 isNaN
		var res = 'abs'/100;
		console.log(res);
		console.log(NaN); //NaN 就是一个值，表示一个没有意义、不正确的数值
		console.log(typeof NaN); //但是它的数据类型是number
		console.log(typeof res); //number

		var n1 = '200';
		var n2 = 5;
		if( (!isNaN(n1))&&(!isNaN(n2)) ){ //如果都是数字进行运算，isNaN = false相当于!(isNaN) = true
			var res = n1 /n2;
			console.log(res)
		}else{
			alert('您输入的数字格式有误，请重新输入')
		}
		// if( isNaN(n1) || isNaN(n2) ){
		// 	alert('您输入的数字格式有误，请重新输入');
		// }else{
		// 	var res = n1 / n2;
		// 	console.log(res);
		// }

		//如果两边有一个值时字符串，就会进行拼接
		var res = 100 + 100 + '100';
		console.log(res); //200100

		// ===完全相等 值和类型都相同才为true
		// ==值相等就是true
		console.log('3' == 3);
		console.log('3' === 3);
		console.log(undefined == null);
		console.log(undefined === null);
		
		//显示(强制)转换 paeseInt(任何字符串都行) 从第一位开始，直到不是数字的哪一位
		var n1 = parseInt(1234.467);//.不是数字
		var n2 = parseInt('234abc');
		var n3 = parseFloat('234.5abc');
		console.log(n1);//1234
		console.log(n2);//234
		console.log(n3);//234.5
		//Number(); 必须是纯数字才行，如果有其他字符串就是NaN
		console.log(Number('12,45'));//12.45
		console.log(Number('12,45a'));//NaN

		// 从页面中获取的h1高度为100px，用parseInt把px单位截掉
		var height = document.getElementsByTagName('h1')[0].style.height;
		console.log(height);
		var newH = parseInt(height);
		console.log(newH);

		//隐式转换

		//转化成布尔
		console.log(!!123); 
		//非零数字 非空值 转化为布尔类型是true
		//【NaN—不算非零数字；
		// Undefined Null 是另外两种基本数据类型也不是非零数字 ；
		// "" ; 0; 这些都是false；】

		// if 和三目运算符 会进行往布尔类型隐式转换
		var val = '123'
		if(val){  //转化成布尔类型
			console.log('不是空值')
		}  //判断是否为空


		//往字符串类型转化
		console.log(true + 'asb');
		// + 进行隐式转换成string(如果两边有一个值时字符串，就会进行拼接)
		var  sum = "img" + 3 + ".jpg";
		//转换成string即自身内容不变 类型改变
		

		//算术运算时（除+以外） 会进行数字类隐式转换
		console.log(23-true); //true--1  false--0
		console.log(23-undefined); // undefined 转化成NaN 
		console.log(23-null); //23 null转化成0
		
		console.log(23-'21');
		console.log(23-"1s"); //NaN
		
		//比较时也会往数值转
		console.log('35'>20);
		console.log(true == 1);
		
		//如果都是字符串时比较首字符串
		console.log('35555'<'5'); //true
		console.log(Number('35555') < Number('5'));

	/*注释语句 */
	//script标签一般放在html所有标签之后
	</script>
	<!-- 
	 HTML中内部JavaScript代码
	 -->
	<!-- 在浏览器默认打开open in default browserl
		浏览器自动刷新:live server 
		汉化chinese
	-->
	<!-- 快捷键:
		复制一行: alt+shift+ 上下箭头
		移动一行:按住alt ，按上下键
		删除一行:快捷键设置:Ctrl+d(自行编辑)
		多光标操作:按住alt ，鼠标点击你想操作的地方
		多光标操作:按住ctrl+alt，按上下箭头
		移动一个单词:按住ctrl，按左右箭头
		删除一个单词:按住Ctr1，按删除键
		快速换行:按住Ctr1键，按回车
	 -->
</body>
</html>